基于 HAProxy + Keepalived 搭建 RabbitMQ 高可用集群

您所在的位置:网站首页 rabbitmq 集群 基于 HAProxy + Keepalived 搭建 RabbitMQ 高可用集群

基于 HAProxy + Keepalived 搭建 RabbitMQ 高可用集群

#基于 HAProxy + Keepalived 搭建 RabbitMQ 高可用集群| 来源: 网络整理| 查看: 265

RabbitMQ 集群

通常情况下,在集群中我们把每一个服务称之为一个节点,在 RabbitMQ 集群中,节点类型可以分为两种:

内存节点:元数据存放于内存中。为了重启后能同步数据,内存节点会将磁盘节点的地址存放于磁盘之中,除此之外,如果消息被持久化了也会存放于磁盘之中,因为内存节点读写速度快,一般客户端会连接内存节点。磁盘节点:元数据存放于磁盘中(默认节点类型),需要保证至少一个磁盘节点,否则一旦宕机,无法恢复数据,从而也就无法达到集群的高可用目的。

PS:元数据,指的是包括队列名字属性、交换机的类型名字属性、绑定信息、vhost等基础信息,不包括队列中的消息数据。

RabbitMQ 中的集群主要有两种模式:普通集群模式和镜像队列模式。

普通集群模式

在普通集群模式下,集群中各个节点之间只会相互同步元数据,也就是说,消息数据不会被同步。那么问题就来了,假如我们连接到 A 节点,但是消息又存储在 B 节点又怎么办呢?

不论是生产者还是消费者,假如连接到的节点上没有存储队列数据,那么内部会将其转发到存储队列数据的节点上进行存储。虽然说内部可以实现转发,但是因为消息仅仅只是存储在一个节点,那么假如这节点挂了,消息是不是就没有了?因此这种普通集群模式并没有达到高可用的目的。

镜像队列模式

普通集群模式下不同节点之间只会相互同步元数据(交换机、队列、绑定关系、vhost的定义)而不会同步消息。例如,队列 1 的消息只存储在节点 1 上,节点 2 和节点 3只 同步了交换机和队列的元数据,但是没有同步消息。

假如生产者连接的是节点 3,要将消息通过交换机A路由到队列 1,最终消息还是会转发到节点 1 上存储;同理如果消费者连接的是节点 2,要从队列 1 上拉取消息,最终消息会从节点1转发到节点 2,其它节点起到一个路由的作用;如果节点1挂掉,则队列 1 的全部数据就会丢失。

镜像队列模式下,节点之间不仅仅会同步元数据,消息内容也会在镜像节点间同步,可用性更高。这种方案提升可用性的同时,也会因为同步数据带来的网络开销从而在一定程度上影响到性能。

基于 HAProxy + Keepalived 高可用集群

假如一个 RabbitMQ 集群中,有多个内存节点,我们应该连接到哪一个节点呢?这个选择的策略如果放在客户端做,那么会有很大的弊端,最严重的的就是每次扩展集群都要修改客户端代码,所以这种方式并不是很可取,所以我们在部署集群的时候就需要一个中间代理组件,这个组件要能够实现服务监控和转发,比如 Redis 中的 Sentinel(哨兵)集群模式,哨兵就可以监听 Redis 节点并实现故障转移。

在 RabbitMQ 集群中,通过 Keepalived 和 HAProxy 两个组件实现了集群的高可用性和负载均衡功能。

HAProxy

HAProxy 是一个开源的、高性能的负载均衡软件,同样可以作为负载均衡软件的还有 nginx,lvs 等。 HAproxy 支持 7 层负载均衡和 4 层负载均衡。

负载均衡

所谓的 7 层负载均衡和 4 层负载均衡针对的是 OSI 模型而言,如下图所示就是一个 OSI 通信模型: 

7层应用层

应用层

HTTP、FTP、DNS、URI、HTML

TLS/SSL、SMTP、POP、IMAP、TELNET、SSH

应用程序6层表示层5层会话层4层传输层

传输层

TCP、UDP、SCTP、DCCP

操作系统3层网络层

网络层

ARP、IP、ICMP、RIP

2层数据链路层网络接口层设备驱动程序网络接口1层物理层

从上表中看到,第 7 层对应应用层,第 4 层对应传输层。常用的负载均衡软件如 nginx 一般工作在第 7 层,lvs(Linux Virtual Server)一般工作在第 4 层。

4 层负载:

4 层负载使用了 NAT (Network Address Translation)技术,即:网络地址转换。收到客户端请求时,可以通过修改数据包里的源 IP 和端口,然后把数据包转发到对应的目标服务器。4 层负载均衡只能根据报文中目标地址和源地址对请求进行转发,无法判断或者修改请求资源的具体类型。

7 层负载:

根据客户端请求的资源路径,转发到不同的目标服务器。

高可用 HAProxy

HAProxy 虽然实现了负载均衡,但是假如只是部署一个 HAProxy,那么其本身也存在宕机的风险。一旦 HAProxy 宕机,那么就会导致整个集群不可用,所以我们也需要对 HAProxy 也实现集群,那么假如 HAProxy 也实现了集群,客户端应该连接哪一台服务呢?问题似乎又回到了起点,陷入了无限循环中...

Keepalived

为了实现 HAProxy 的高可用,需要再引入一个 Keepalived 组件,Keepalived 组件主要有以下特性:

具有负载功能,可监控集群中的节点状态,如果集群中某一个节点宕机,可以实现故障转移。其本身也可以实现集群,但是只能有一个 master 节点。master 节点会对外提供一个虚拟 IP,应用端只需要连接这一个 IP 就行了。可以理解为集群中的 HAProxy 节点会同时争抢这个虚拟 IP,哪个节点争抢到,就由哪个节点来提供服务。 VRRP 协议

VRRP 协议即虚拟路由冗余协议(Virtual Router Redundancy Protocol)。Keepalived 中提供的虚拟 IP 机制就属于 VRRP,它是为了避免路由器出现单点故障的一种容错协议。

搭建高可用 RabbitMQ 集群 集群环境准备

准备三台虚拟机,分别安装好 Erlang 和 RabbitMQ,可以用克隆功能。

本文服务器环境:CentOS7

[CentOS7] Install RabbitMQ Using PackageCloud Yum Repository

服务器 A:192.168.189.156 RabbitMQ 内存节点 HAPRoxy Keepalived(master)

服务器 B:192.168.189.157 RabbitMQ 内存节点 HAPRoxy Keepalived(backup)

服务器 C:192.168.189.158 RabbitMQ 磁盘节点

Keepalived: Virtual IP 192.168.189.159

集群网络架构

RabbitMQ 环境变量

环境变量配置文件 rabbitmq-env.conf 默认配置在 /etc/rabbitmq 目录,如果不存在直接创建即可,RabbitMQ 应用会自动加载。rabbitmq-env.conf 包含重写 RabbitMQ 脚本和 CLI 工具中内置默认值的环境变量。

该文件由系统 shell 解释,因此应包含一系列 shell 环境变量定义。允许使用普通的shell语法(因为文件的源代码是使用shell “.” 运算符),包括以#号开头的行注解。

按照优先级顺序,启动脚本从 shell 环境变量、rabbitmq-env.conf 和最后从内置的默认值获取它们的值。例如,对于 RABBITMQ_NODENAME 设置,首先检查 shell 环境变量中的RABBITMQ_NODENAME 如果不存在或等于空字符串,则选中 rabbitmq-env.conf 中的 NODENAME;如果它也不存在或等于空字符串,则使用启动脚本中的默认值。

rabbitmq-env.conf 中的变量名始终等于环境变量名,去掉了 RABBITMQ_ 前缀;环境变量中的 RABBITMQ_NODE_PORT 在 rabbitmq-env.conf 中的名字是 NODE_PORT。

RabbitMQ 节点

RabbitMQ 节点以节点名称作为标识,而节点名称由两部分组成:前缀 (默认是rabbit) 和主机名。当节点启动时,它会检查是否已为其分配了节点名,如果配置文件 rabbitmq-env.conf 中没有配置,则节点将解析其主机名并在其前面添加 rabbit 作为其节点名。

如果在给定的主机上运行多个节点,它们必须使用不同的前缀,例如:rabbit1@hostname 和 rabbit2@hostname。如果系统使用完全限定域名作为主机名,RabbitMQ 节点和 CLI 工具必须配置为使用长节点名称。对于服务器节点,需要将 RABBITMQ_USE_LONGNAME 环境变量设置为 true;对于 CLI 工具,必须设置 RABBITMQ_USE_LONGNAME 或 指定 –longnames 选项。例如:[email protected] 其中 rabbit 为前缀,centos 是主机名,qq.com 为节点的域名。

在集群中节点名称必须是唯一的,每个节点使用节点名称来标识和联系彼此,这意味着必须解析每个节点名的主机名部分。RabbitMQ 默认节点名称是 rabbit@主机名 ,如果想自定义节点名称则需要在配置文件 /etc/rabbitmq/rabbitmq-env.conf 中配置:

NODENAME=rabbit@节点名 配置 .erlang.cookie

.erlang.cookie 文件中的字符串相当于一个密钥,一个节点要想加入某个集群,必须和所有节点的 .erlang.cookie 文件内容一致,所以通常将主节点的 .erlang.cookie 文件复制给其它节点。这里以 192.168.189.158 作为主节点,.erlang.cookie 文件位置需要在 RabbitMQ 启动日志中查看:

cat /var/log/rabbitmq/[email protected] 2023-02-26 21:26:40.908761+08:00 [info] Starting RabbitMQ 3.10.0 on Erlang 23.3.4.11 [emu] 2023-02-26 21:26:40.908761+08:00 [info] Copyright (c) 2007-2022 VMware, Inc. or its affiliates. 2023-02-26 21:26:40.908761+08:00 [info] Licensed under the MPL 2.0. Website: https://rabbitmq.com 2023-02-26 21:26:40.912755+08:00 [info] 2023-02-26 21:26:40.912755+08:00 [info] node : rabbit@centos158 2023-02-26 21:26:40.912755+08:00 [info] home dir : /var/lib/rabbitmq 2023-02-26 21:26:40.912755+08:00 [info] config file(s) : (none) 2023-02-26 21:26:40.912755+08:00 [info] cookie hash : 2cPR2mBWsaQ6fP0SWZ1QzA== 2023-02-26 21:26:40.912755+08:00 [info] log(s) : /var/log/rabbitmq/[email protected] 2023-02-26 21:26:40.912755+08:00 [info] : /var/log/rabbitmq/rabbit@centos158_upgrade.log

其中 home dir 即为 .erlang.cookie 文件位置,复制主节点服务器 .erlang.cookie 文件内容到其它两个节点,使三台服务器中的 .erlang.cookie 内容一致。

配置 hosts

配置三个服务器节点的 /etc/hosts 文件:添加节点名和节点IP的映射关系

192.168.189.156 centos156 192.168.189.157 centos157 192.168.189.158 centos158

重启网络 service network restart 测试是否能够互相 ping 通。

建立集群

注:在配置 .erlang.cookie 和 hosts 之前不要启动 RabbitMQ 节点。

建立集群之前首先启动主节点 192.168.189.158 (磁盘节点)

systemctl start rabbitmq-server.service

然后分别启动其余两个子节点 (内存节点) 并加入集群:

# 启动 RabbitMQ 服务 systemctl start rabbitmq-server.service # 暂停应用以便加入集群 rabbitmqctl stop_app # 清除全部数据(可选) rabbitmqctl reset # 作为内存节点加入集群 rabbitmqctl join_cluster --ram rabbit@centos158 # 恢复应用运行 rabbitmqctl start_app  查看集群状态 rabbitmqctl cluster_status

在任一节点的后台管理页面查看

配置镜像队列

在主节点执行如下命令:(添加一个节点,其它节点也都会有该策略)

# 设置集群所有节点及全部队列进行镜像 rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'

镜像队列详细配置可参考:

RabbitMQ集群配置镜像队列 - CSDNhttps://blog.csdn.net/weixin_47026543/article/details/113563395

Classic Queue Mirroring — RabbitMQhttps://www.rabbitmq.com/ha.html

管理集群 # 退出集群 rabbitmqctl stop_app rabbitmqctl reset rabbitmqctl start_app # 移除节点 # 关闭要移除的节点A rabbitmqctl stop_app # 在其他节点移除节点A rabbitmqctl forget_cluster_node rabbit@rabbitName 负载均衡-HAProxy 安装HAProxy

在两个内存节点156和157分别安装 HAProxy

yum -y install haproxy 配置 HAProxy cd /etc/haproxy/ cp haproxy.cfg haproxy.cfg.bak

配置文件内容全部覆盖

#--------------------------------------------------------------------- # Global settings #--------------------------------------------------------------------- global log 127.0.0.1 local2 chroot /var/lib/haproxy # 改变当前工作目录 pidfile /var/run/haproxy.pid # haproxy的pid存放路径,启动进程的用户必须有权限访问此文件 maxconn 4000 # 最大连接数,默认4000 user root # 指定haproxy运行时的用户身份 group root # 指定haproxy运行时的用户组 daemon # 创建1个进程进入deamon模式运行,此参数要求将运行模式设置为daemon stats socket /var/lib/haproxy/stats # 创建监控所用的套接字目录 #--------------------------------------------------------------------- # defaults settings #--------------------------------------------------------------------- # 注意:因为要使用tcp的负载,需要屏蔽掉与http相关的默认配置 defaults mode http # 默认的模式mode { tcp|http|health },tcp是4层,http是7层,health只会返回OK log global # option httplog # 采用http日志格式 option dontlognull # 启用该项,日志中将不会记录空连接。所谓空连接就是在上游的负载均衡器 # option http-server-close # 每次请求完毕后主动关闭http通道 # option forwardfor except 127.0.0.0/8 # 如果后端服务器需要获得客户端真实ip需要配置的参数,可以从Http Header中获得客户端ip option redispatch # serverId对应的服务器挂掉后,强制定向到其他健康的服务器 retries 3 # 3次连接失败就认为服务不可用,也可以通过后面设置 # timeout http-request 10s # http请求超时时间 timeout queue 1m # 队列超时时间 timeout connect 10s # 连接超时时间 timeout client 1m # 客户端连接超时时间 timeout server 1m # 服务器端连接超时时间 # timeout http-keep-alive 10s # 持久连接超时时间 timeout check 10s # 设置超时检查超时时间 maxconn 3000 # 最大连接数 ###################### HAProxy统计页面配置 ###################################### listen status bind 0.0.0.0:1080 # 监听端口 mode http # http的7层模式 stats enable stats refresh 30s # 每隔?秒自动刷新监控页面 stats uri /haproxy/stats # 设置监控页面的url访问路径(http://localhost:1080/haproxy/stats) stats auth admin:123456 # 设置监控页面的用户和密码(可配置多个用户) stats realm (Haproxy\ statistic) # 监控页面的提示信息 stats hide-version # 隐藏监控页面版本信息 stats admin if TRUE # 手工启用/禁用后端服务器 ###################### RabbitMQ集群web管理页面负载均衡配置 ####################### listen rabbitmq_admin bind 0.0.0.0:15670 # 监听端口 balance roundrobin server rmq156 192.168.189.156:15672 server rmq157 192.168.189.157:15672 ####################### RabbitMQ集群负载均衡配置 ################################# listen rabbitmq_cluster bind 0.0.0.0:5670 mode tcp # 负载均衡算法:支持 roundrobin,source,static-rr,leastconn,uri 等算法 balance roundrobin # 轮询算法 # check inter 5000 是检测心跳频率 # rise 2是2次正确认为服务器可用 # fall 3是3次失败认为服务器不可用 server rmq156 192.168.189.156:5672 check inter 5000 rise 2 fall 3 server rmq157 192.168.189.157:5672 check inter 5000 rise 2 fall 3 启动 HAProxy

分别启动156和157的 HAProxy

# yum方式 systemctl start haproxy # 源码方式: 通过配置文件启动 haproxy -f /etc/haproxy/haproxy.cfg

启动报错

源码方式可正常启动,使用 systemctl 命令无法启动服务,查看服务状态日志如下:

一、报错信息为:cannot bind socket [0.0.0.0:xxxx]

root@centos156:/etc/haproxy # systemctl status haproxy ● haproxy.service - HAProxy Load Balancer Loaded: loaded (/usr/lib/systemd/system/haproxy.service; disabled; vendor preset: disabled) Active: failed (Result: exit-code) since 一 2023-02-27 22:56:42 CST; 41s ago Process: 14563 ExecStart=/usr/sbin/haproxy-systemd-wrapper -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid $OPTIONS (code=exited, status=1/FAILURE) Main PID: 14563 (code=exited, status=1/FAILURE) 2月 27 22:56:42 centos156 systemd[1]: Started HAProxy Load Balancer. 2月 27 22:56:42 centos156 haproxy-systemd-wrapper[14563]: haproxy-systemd-wrapper: executing /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Ds 2月 27 22:56:42 centos156 haproxy-systemd-wrapper[14563]: [ALERT] 057/225642 (14566) : Starting proxy status: cannot bind socket [0.0.0.0:1080] 2月 27 22:56:42 centos156 haproxy-systemd-wrapper[14563]: [ALERT] 057/225642 (14566) : Starting proxy rabbitmq_admin: cannot bind socket [0.0.0.0:15670] 2月 27 22:56:42 centos156 haproxy-systemd-wrapper[14563]: [ALERT] 057/225642 (14566) : Starting proxy rabbitmq_cluster: cannot bind socket [0.0.0.0:5670] 2月 27 22:56:42 centos156 haproxy-systemd-wrapper[14563]: haproxy-systemd-wrapper: exit, haproxy RC=1 2月 27 22:56:42 centos156 systemd[1]: haproxy.service: main process exited, code=exited, status=1/FAILURE 2月 27 22:56:42 centos156 systemd[1]: Unit haproxy.service entered failed state. 2月 27 22:56:42 centos156 systemd[1]: haproxy.service failed.

1. 检查是否开启防火墙以及端口是否被占用

# 查看是否开启防火墙 systemctl status firewalld # 查看端口是否被占用 netstat -tunlp | grep 1080

2. 查看 HAProxy 服务器中是否开启 Apache 或 Nginx 等 WEB 服务,如果有请先停掉这些服务。

2. 尝试关闭 selinux 或者 执行以下命令

setsebool -P haproxy_connect_any=1

3. HAProxy 配置了本机 IP 或 0.0.0.0 以外的 IP,比如虚拟 IP (Virtual IP)

1) # HAProxy 绑定非本机 IP 需要在 /etc/sysctl.conf 文件中进行配置:

# 修改内核参数 vim /etc/sysctl.conf # 没有就新增此条记录 net.ipv4.ip_nonlocal_bind = 1 # 保存使结果生效 sysctl -p

2) #  确认是否开启内核转发功能

# 临时开启 echo 1 > /proc/sys/net/ipv4/ip_forward # 永久生效 echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf

Haproxy启动故障:Starting proxy:cannot bind sockehttps://blog.csdn.net/qq_31889553/article/details/102852256

HAProxy cannot bind socket [0.0.0.0:8888] - Stack Overflowhttps://stackoverflow.com/questions/34793885/haproxy-cannot-bind-socket-0-0-0-08888

二、报错信息为: Cannot create pidfile /run/haproxy.pid

root@centos156:/etc/haproxy # systemctl status haproxy ● haproxy.service - HAProxy Load Balancer Loaded: loaded (/usr/lib/systemd/system/haproxy.service; disabled; vendor preset: disabled) Active: failed (Result: exit-code) since 一 2023-02-27 23:20:13 CST; 9s ago Process: 16010 ExecStart=/usr/sbin/haproxy-systemd-wrapper -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid $OPTIONS (code=exited, status=1/FAILURE) Main PID: 16010 (code=exited, status=1/FAILURE) 2月 27 23:20:13 centos156 systemd[1]: Started HAProxy Load Balancer. 2月 27 23:20:13 centos156 haproxy-systemd-wrapper[16010]: haproxy-systemd-wrapper: executing /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Ds 2月 27 23:20:13 centos156 haproxy-systemd-wrapper[16010]: [ALERT] 057/232013 (16012) : [/usr/sbin/haproxy.main()] Cannot create pidfile /run/haproxy.pid 2月 27 23:20:13 centos156 haproxy-systemd-wrapper[16010]: haproxy-systemd-wrapper: exit, haproxy RC=1 2月 27 23:20:13 centos156 systemd[1]: haproxy.service: main process exited, code=exited, status=1/FAILURE 2月 27 23:20:13 centos156 systemd[1]: Unit haproxy.service entered failed state. 2月 27 23:20:13 centos156 systemd[1]: haproxy.service failed.

1. 检查 haproxy.cfg 配置的用户 user 是否拥有 root 权限

2. 尝试删除 /run/haproxy.pid 并重新启动 HAProxy 服务

测试 HAProxy

测试浏览器能正常访问以下两个地址的 RabbitMQ 管理页面

192.168.189.156:15670 192.168.189.157:15670

测试浏览器能正常访问以下两个地址的 HAProxy 监控页面 (amdin/123456)

192.168.189.156:1080/haproxy/stats 192.168.189.157:1080/haproxy/stats

主备-Keepalived 安装Keepalived yum install -y keepalived 配置Keepalived cd /etc/keepalived cp keepalived.conf keepalived.conf.bak

156 作为主机 master 配置如下:

global_defs { router_id NodeA # 路由ID:主机与备机不能相同 script_user root enable_script_security } vrrp_script chk_haproxy { # 自定义监控脚本 script "/etc/keepalived/check_haproxy.sh" interval 5 weight 2 } vrrp_instance VI_1 { state MASTER # 这里标记为主机Master interface ens33 # 这里的必须和你的网卡一致,ipconfig获得 virtual_router_id 1 # 这里表示路由的唯一标识与备机一致 priority 100 # 配置优先级:备机要小于主机 advert_int 1 # 设置主备之间的检查时间,单位为s authentication { auth_type PASS # 配置认证方式 auth_pass root # 配置认证密码 } virtual_ipaddress { # 配置虚拟ip地址,主备需保持一致,可设置多个 192.168.189.159 } track_script { chk_haproxy } }

157 作为备机 backup 配置如下:

global_defs { router_id NodeB # 路由ID:主机与备机不能相同 script_user root enable_script_security } vrrp_script chk_haproxy { # 自定义监控脚本 script "/etc/keepalived/check_haproxy.sh" interval 5 weight 2 } vrrp_instance VI_1 { state BACKUP # 这里标记为备机Backup interface ens33 # 这里的必须和你的网卡一致,ipconfig获得 virtual_router_id 1 # 这里表示路由的唯一标识与备机一致 priority 50 # 配置优先级:备机要小于主机 advert_int 1 # 设置主备之间的检查时间,单位为s authentication { auth_type PASS # 配置认证方式 auth_pass root # 配置认证密码 } virtual_ipaddress { # 配置虚拟ip地址,主备需保持一致,可设置多个 192.168.189.159 } track_script { chk_haproxy } } 编写监控脚本 vim /etc/keepalived/check_haproxy.sh #!/bin/bash if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ];then service haproxy start fi sleep 2 if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ];then service keepalived stop fi # 添加可执行权限 chmod 755 /etc/keepalived/check_haproxy.sh

 check_haproxy.sh 脚本作用

如果 HAProxy 服务挂了,尝试重启;如果重启不成功,则关闭 Keepalived 服务,自动切换到 backup。

启动 Keepalived

先启动 156 master 再启动 157 backup

service keepalived start 监测 Keepalived

1. 查看 Keepalived 状态

service keepalived status

2. 查看 Keepalived 日志输出

tail -200f /var/log/messages

3. 查看添加的虚拟IP (master)

ip add show

4. master 模拟异常关闭

service keepalived stop

master 关闭后对应的虚拟IP也会消失,backup 成为新的 master,异常 master 重启后会重新恢复为 master 。

5.  master 模拟 HAProxy 异常关闭

service haproxy stop

测试 HAProxy 异常关闭后,打印 Keepalived 日志查看监控脚本是否正常执行。

# 打印 Keepalived 日志 tail -200f /var/log/messages # 正常启动脚本日志信息(注意succeeded) Feb 28 03:42:05 centos156 Keepalived_vrrp[37334]: VRRP_Instance(VI_1) Entering MASTER STATE Feb 28 03:42:05 centos156 Keepalived_vrrp[37334]: VRRP_Instance(VI_1) setting protocol VIPs. Feb 28 03:42:05 centos156 Keepalived_vrrp[37334]: Sending gratuitous ARP on ens33 for 192.168.189.159 Feb 28 03:42:05 centos156 Keepalived_vrrp[37334]: VRRP_Instance(VI_1) Sending/queueing gratuitous ARPs on ens33 for 192.168.189.159 Feb 28 03:42:05 centos156 Keepalived_vrrp[37334]: Sending gratuitous ARP on ens33 for 192.168.189.159 Feb 28 03:42:05 centos156 Keepalived_vrrp[37334]: Sending gratuitous ARP on ens33 for 192.168.189.159 Feb 28 03:42:05 centos156 Keepalived_vrrp[37334]: Sending gratuitous ARP on ens33 for 192.168.189.159 Feb 28 03:42:05 centos156 Keepalived_vrrp[37334]: Sending gratuitous ARP on ens33 for 192.168.189.159 Feb 28 03:42:05 centos156 avahi-daemon[816]: Registering new address record for 192.168.189.159 on ens33.IPv4. Feb 28 03:42:06 centos156 Keepalived_vrrp[37334]: VRRP_Script(chk_haproxy) succeeded Feb 28 03:42:07 centos156 Keepalived_vrrp[37334]: VRRP_Instance(VI_1) Changing effective priority from 100 to 102 Feb 28 03:42:10 centos156 Keepalived_vrrp[37334]: Sending gratuitous ARP on ens33 for 192.168.189.159 Feb 28 03:42:10 centos156 Keepalived_vrrp[37334]: VRRP_Instance(VI_1) Sending/queueing gratuitous ARPs on ens33 for 192.168.189.159 Feb 28 03:42:10 centos156 Keepalived_vrrp[37334]: Sending gratuitous ARP on ens33 for 192.168.189.159 Feb 28 03:42:10 centos156 Keepalived_vrrp[37334]: Sending gratuitous ARP on ens33 for 192.168.189.159 Feb 28 03:42:10 centos156 Keepalived_vrrp[37334]: Sending gratuitous ARP on ens33 for 192.168.189.159 Feb 28 03:42:10 centos156 Keepalived_vrrp[37334]: Sending gratuitous ARP on ens33 for 192.168.189.159

解决 Keepalived 监测脚本一直不执行https://blog.csdn.net/Bb15070047748/article/details/106276491

解决Keepalived脚本启动时warning、unsafe、not executable - CSDNhttps://blog.csdn.net/Kangyucheng/article/details/110122893

测试虚拟 IP

浏览器通过虚拟IP访问能正常打开 RabbitMQ 管理页面 和 HAProxy 监控页面

应用访问集群

1. IP 为 Keepalived 中配置的虚拟IP

2. PORT 为 RabbitMQ 默认的 5672

3. 账号密码同 RabbitMQ

参考资料

单机RabbitMQ集群的搭建及高可用集群原理分析 - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/350446326

高可用RabbitMQ集群的搭建和使用 - 劈天造陆 - 博客园 (cnblogs.com)https://www.cnblogs.com/java-spring/p/8855862.html

HAProxy安装与配置 - 我爱吃芹菜~ - 博客园 (cnblogs.com)https://www.cnblogs.com/leixixi/p/14749322.html

rabbitmq搭建集群踩坑记 - 腾讯云开发者社区-腾讯云 (tencent.com)https://cloud.tencent.com/developer/article/1683781



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3